/****************************************************************************
 * Elisa 1.0                                                                *
 *--------------------------------------------------------------------------*
 * Author: Laurent Granvilliers, Vincent Sorin                              *
 * Copyright (c) 2004 Laboratoire d'Informatique de Nantes Atlantique       *
 *--------------------------------------------------------------------------*
 * Elisa is distributed WITHOUT ANY WARRANTY. Read the associated           *
 * COPYRIGHT file for more details.                                         *
 *--------------------------------------------------------------------------*
 * elisa_interval_solver.h                                                    *
 ****************************************************************************/

/**
 * @file elisa_interval_solver.h
 * @brief Classes for search algorithm over interval domains.
 */


#ifndef _ELISA_INTERVAL_SOLVER_H
#define _ELISA_INTERVAL_SOLVER_H


#include "elisa_defs.h"
#include "elisa_fp_reduction.h"
#include "elisa_solver.h"
#include "elisa_box_reduction.h"
#include "elisa_newton_reduction.h"
#include "elisa_interval_strategy.h"

#include <iostream>

NAMESPACE_ELISA


/**
 * @ingroup Search
 * @class IntervalSolver:
 * @brief Interval branch-and-prune algorithm
 */
class IntervalSolver : public Solver
{
public:
	/**
 	 * Constructor: each solver is associated to a model
 	 * @param mo Constraints' model
 	 */
	IntervalSolver (Model & mo) :
		Solver(&mo)
	{
	}

	/**
 	 * Destructor
 	 */
	~IntervalSolver ()
	{
	}


	/**
 	 * Use of the splitting strategy SearchMaxInterval
 	 */
	void useSearchMaxInterval()
	{
		Solver::useChoiceStrategy(new SearchMaxInterval());
	}

	/**
 	 * Use of the splitting strategy SearchRoundRobin
 	 */
	void useSearchRoundRobin()
	{
		Solver::useChoiceStrategy(new SearchRoundRobin());
	}
};
END_NAMESPACE_ELISA
#endif // ELISA_INTERVAL_SOLVER
